﻿//Created by Action Script Viewer - http://www.buraks.com/asv
package de.polygonal.ds.sort {
    import de.polygonal.ds.*;

    public function dLinkedInsertionSort(_arg1:DListNode, _arg2:Boolean=false):DListNode{
        var _local4:DListNode;
        var _local5:DListNode;
        var _local6:DListNode;
        var _local7:DListNode;
        var _local8:*;
        if (!_arg1){
            return (null);
        };
        var _local3:DListNode = _arg1;
        if (_arg2){
            _local5 = _local3.next;
            while (_local5) {
                _local6 = _local5.next;
                _local4 = _local5.prev;
                if (_local4.data < _local5.data){
                    _local7 = _local4;
                    while (_local7.prev) {
                        if (_local7.prev.data < _local5.data){
                            _local7 = _local7.prev;
                        } else {
                            break;
                        };
                    };
                    if (_local6){
                        _local4.next = _local6;
                        _local6.prev = _local4;
                    } else {
                        _local4.next = null;
                    };
                    if (_local7 == _local3){
                        _local5.prev = null;
                        _local5.next = _local7;
                        _local7.prev = _local5;
                        _local3 = _local5;
                    } else {
                        _local5.prev = _local7.prev;
                        _local7.prev.next = _local5;
                        _local5.next = _local7;
                        _local7.prev = _local5;
                    };
                };
                _local5 = _local6;
            };
            return (_local3);
        };
        _local5 = _local3.next;
        while (_local5) {
            _local6 = _local5.next;
            _local4 = _local5.prev;
            if (_local4.data > _local5.data){
                _local7 = _local4;
                while (_local7.prev) {
                    if (_local7.prev.data > _local5.data){
                        _local7 = _local7.prev;
                    } else {
                        break;
                    };
                };
                if (_local6){
                    _local4.next = _local6;
                    _local6.prev = _local4;
                } else {
                    _local4.next = null;
                };
                if (_local7 == _local3){
                    _local5.prev = null;
                    _local5.next = _local7;
                    _local7.prev = _local5;
                    _local3 = _local5;
                } else {
                    _local5.prev = _local7.prev;
                    _local7.prev.next = _local5;
                    _local5.next = _local7;
                    _local7.prev = _local5;
                };
            };
            _local5 = _local6;
        };
        return (_local3);
    }
}//package de.polygonal.ds.sort 
